package com.studypavilion.day4;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.StandardCharsets;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "info";
    private TextView edtHigh;
    private TextView edtFL;
    private TextView edtType;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        edtHigh = findViewById(R.id.textView5);
        edtFL = findViewById(R.id.textView6);
        edtType = findViewById(R.id.textView7);

        EditText edt = findViewById(R.id.editTextTextPersonName);
        Button btn = findViewById(R.id.button);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        String city = edt.getText().toString();
                        httpGet(city);

                    }
                }).start();
            }
        });
    }
    private void httpGet(String city){
//        http 天气请求, HttpClient、HttpURLConnection、OKHttp
        try {
//            1、创建URL对象 ---> 找水源
            URL url = new URL("http://wthrcdn.etouch.cn/weather_mini?city=" + city);

//            2、构建http请求对象 -->打开水闸
            HttpURLConnection connection = (HttpURLConnection)url.openConnection();

//            3、设置请求方式

            connection.setRequestMethod("GET");

//            POST方法
//            connection.setRequestMethod("POST");
//            connection.setRequestProperty("api-key", "");

//            4、（可以）设置连接主机服务器的超时时间 单位毫秒

            connection.setConnectTimeout(2 * 1000);

//            5、（可以）设置读取服务区返回数据的超时时间 单位毫秒
            connection.setReadTimeout(60*1000);

//            6、发起请求
            connection.connect();

//            7、获得服务器回复的数据，也被称为输入流
            InputStream inputStream = connection.getInputStream();

//            8、从输入流中，将数据按照 "UTF-8" 的编码格式保存到 InputStreamReader 流中
            InputStreamReader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);

//            9、将InputStreamReader 流中的数据保存到 可读的缓存区 （）
            BufferedReader bufferedReader = new BufferedReader(reader);

            StringBuffer buffer = new StringBuffer();
            String tem;

//            10、为了保证能将网络数据全部读取完整
//            11、readline();一次读取一行数据，如果读取到数据
            while ((tem = bufferedReader.readLine()) != null){
//                12、将读取到的数据追加（保存）到缓存区
                buffer.append(tem);
            }
//            Log.i(TAG, "httpGet: " + buffer.toString());
            JsonOption(buffer.toString());

//            关闭可读缓存区，如果不关闭，这个缓存区会一直占用内存
            bufferedReader.close();
//            关闭可读数据流
            reader.close();
//            关闭输入流
            inputStream.close();
//            关闭连接
            connection.disconnect();


        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }
    private void JsonOption(String buf){

        try {
//                    1、将字符串数据转换成Json对象
            JSONObject obj = new JSONObject(String.valueOf(buf));

            JSONObject data = obj.getJSONObject("data");
//            Log.i(TAG, "data: " + data);

            JSONArray array = data.getJSONArray("forecast");
//            Log.i(TAG, "forecast: " + array);
//            将Json数据中的下标为0的对象提取出来
            JSONObject obj1 = array.getJSONObject(0);
            Log.i(TAG, "index: " + obj1);

//            提取获得1key为“high”的Value值 split(); 将字符串进行分割
            String High = obj1.getString("high").toString().split(" ")[1];

            String fengli = obj1.getString("fengli");

            String Type = obj1.getString("type");
//            Log.i(TAG, "fl: "+ fl);

//            substring 字符串切片，从某个字符的下标开始到某个下标结束
            String h = High.substring(0, High.indexOf("℃"));

//            Android 中只有主线程才能操作UI界面，

            MainActivity.this.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    edtHigh.setText(High);
                    edtFL.setText(fengli);
                    edtType.setText(Type);

                }
            });
        } catch (JSONException e) {
            e.printStackTrace();
        }

    }
}